x86/ioreq server: add DMOP to map guest ram with p2m_ioreq_server to an ioreq server
authorPaul Durrant <paul.durrant@citrix.com>
Fri, 7 Apr 2017 15:38:11 +0000 (17:38 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 7 Apr 2017 15:38:11 +0000 (17:38 +0200)
commitca2b511d3ff47c2c3250b884f3903271427be0c1
tree1e52e4f246584fa24d364847fb0b1f5fc32f7b76
parentd909cb99998cd63761e238c59e274450c7dacd8e
x86/ioreq server: add DMOP to map guest ram with p2m_ioreq_server to an ioreq server

Previously, p2m_ioreq_server is used to write-protect guest ram
pages, which are tracked with ioreq server's rangeset. However,
number of ram pages to be tracked may exceed the upper limit of
rangeset.

Now, a new DMOP - XEN_DMOP_map_mem_type_to_ioreq_server, is added
to let one ioreq server claim/disclaim its responsibility for the
handling of guest pages with p2m type p2m_ioreq_server. Users of
this DMOP can specify which kind of operation is supposed to be
emulated in a parameter named flags. Currently, this DMOP only
support the emulation of write operations. And it can be further
extended to support the emulation of read ones if an ioreq server
has such requirement in the future.

For now, we only support one ioreq server for this p2m type, so
once an ioreq server has claimed its ownership, subsequent calls
of the XEN_DMOP_map_mem_type_to_ioreq_server will fail. Users can
also disclaim the ownership of guest ram pages with p2m_ioreq_server,
by triggering this new DMOP, with ioreq server id set to the current
owner's and flags parameter set to 0.

Note:
a> both XEN_DMOP_map_mem_type_to_ioreq_server and p2m_ioreq_server
are only supported for HVMs with HAP enabled.

b> only after one ioreq server claims its ownership of p2m_ioreq_server,
will the p2m type change to p2m_ioreq_server be allowed.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Signed-off-by: Yu Zhang <yu.c.zhang@linux.intel.com>
Acked-by: Tim Deegan <tim@xen.org>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: George Dunlap <george.dunlap@citrix.com>
xen/arch/x86/hvm/dm.c
xen/arch/x86/hvm/emulate.c
xen/arch/x86/hvm/ioreq.c
xen/arch/x86/mm/p2m-ept.c
xen/arch/x86/mm/p2m-pt.c
xen/arch/x86/mm/p2m.c
xen/arch/x86/mm/shadow/multi.c
xen/include/asm-x86/hvm/ioreq.h
xen/include/asm-x86/p2m.h
xen/include/public/hvm/dm_op.h
xen/include/public/hvm/hvm_op.h